/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package de.cismet.cids.editors; import Sirius.navigator.types.treenode.DefaultMetaTreeNode; import Sirius.navigator.types.treenode.ObjectTreeNode; import Sirius.navigator.ui.dnd.MetaTreeNodeTransferable; import Sirius.server.middleware.types.MetaObjectNode; import java.awt.Component; import java.awt.dnd.DnDConstants; import java.awt.dnd.DragGestureEvent; import java.awt.dnd.DragGestureListener; import java.awt.dnd.DragGestureRecognizer; import java.awt.dnd.DragSource; import java.awt.dnd.DragSourceDragEvent; import java.awt.dnd.DragSourceDropEvent; import java.awt.dnd.DragSourceEvent; import java.awt.dnd.DragSourceListener; import java.util.ArrayList; import java.util.List; import javax.swing.DefaultListCellRenderer; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JList; import de.cismet.cids.dynamics.CidsBean; /** * A list that can display cidsBeans with their icon and name and allows the drag operation. * * @author therter * @version $Revision$, $Date$ */ public class CidsBeanList extends JList implements DragSourceListener, DragGestureListener { //~ Instance fields -------------------------------------------------------- private DragSource ds; private MetaTreeNodeTransferable metaTransferable; //~ Constructors ----------------------------------------------------------- /** * Creates a new CidsBeanList object. */ public CidsBeanList() { ds = DragSource.getDefaultDragSource(); final DragGestureRecognizer dgr = ds.createDefaultDragGestureRecognizer( this, DnDConstants.ACTION_COPY_OR_MOVE, this); // shows CidsBeans with their icon and name setCellRenderer(new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent(final JList list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus) { final Component result = super.getListCellRendererComponent( list, value, index, isSelected, cellHasFocus); if ((result instanceof JLabel) && (value instanceof CidsBean)) { final CidsBean bean = (CidsBean)value; if (bean.getMetaObject().getMetaClass().getObjectIconData() != null) { ((JLabel)result).setIcon( new ImageIcon(bean.getMetaObject().getMetaClass().getObjectIconData())); } ((JLabel)result).setText(value.toString()); } return result; } }); } //~ Methods ---------------------------------------------------------------- @Override public void dragEnter(final DragSourceDragEvent dsde) { } @Override public void dragOver(final DragSourceDragEvent dsde) { } @Override public void dropActionChanged(final DragSourceDragEvent dsde) { } @Override public void dragExit(final DragSourceEvent dse) { } @Override public void dragDropEnd(final DragSourceDropEvent dsde) { } @Override public void dragGestureRecognized(final DragGestureEvent dge) { final List<DefaultMetaTreeNode> selectedValues = new ArrayList<DefaultMetaTreeNode>(); if (getSelectedValues() != null) { for (final Object bean : getSelectedValues()) { final MetaObjectNode mon = new MetaObjectNode((CidsBean)bean); final ObjectTreeNode metaTreeNode = new ObjectTreeNode(mon); selectedValues.add(metaTreeNode); } this.metaTransferable = new MetaTreeNodeTransferable(selectedValues); this.metaTransferable.setTransferAction(dge.getDragAction()); this.ds.startDrag( dge, DragSource.DefaultMoveDrop, this.metaTransferable, this); } } }